#include <stdio.h>

void main()
{
    short s1 = 32767, s2 = -32786, s;       // -32768 为16位最小负数， 32767 为16位最大正数
    unsigned char uc1 = 128, uc2 = 255, uc; // 255 为8位无符号最大值

    s = s1 + 1;
    printf(" %d + 1 = %d\n", s1, s); // 输出 32767 + 1 = -32768   正正得负，正上溢

    s = s2 - 3;
    printf(" %d - 3 = %d\n", s2, s); // 输出 -32786 - 3 = 32768   负负得正，负上溢

    uc = uc1 + uc2;
    printf(" %d + %d = %d\n", uc1, uc2, uc); // 输出  128 + 255 = 127   越加越小，无符号溢出  

    uc = uc1 - uc2;
    printf(" %d - %d = %d\n", uc1, uc2, uc); // 输出 128 - 255 = 129    越减越小，无符号溢出 
}